using System;
using System.Collections.Generic;
using MvcCms.Data;

namespace MvcCmsOptIn.Data
{
    public interface IOptInRepository
    {
        IEnumerable<OptInLinkTracking> ListTrackingLinks(int newsLetterId);
        void DeleteTrackingLink(int linkId);
        OptInLinkTracking EditTrackingLink(OptInLinkTracking trackingLinkToEdit);
        OptInLinkTracking GetTrackingLink(int linkTrackingID);
        OptInLinkTracking CreateTrackingLink(OptInLinkTracking linkToCreate);

        void DeleteSubscriber(int subscriberId);
        void DeleteSubscriberList(int subscriberListId);
        OptInSubscriber EditSubscriber(OptInSubscriber subscriberToEdit);
        OptInSubscriber GetSubscriber(int subscriberId);
        OptInSubscriber GetSubscriber(string email);
        OptInSubscriber CreateSubscriber(OptInSubscriber subscriberToCreate);
        IEnumerable<OptInSubscriber> ListSubscribers(int portalId);
        IEnumerable<OptInSubscriberList> ListListsSubscribers(int newsLetterID);
        IEnumerable<DTOSubscriber> ListListSubscribers(int listId);

        void DeleteList(int listId);
        OptInList EditList(OptInList listToEdit);
        OptInList GetList(int listId);        
        OptInList CreateList(OptInList listToCreate);
        IEnumerable<OptInListWithCounts> ListListsWithCounts(int portalId);
        IEnumerable<OptInList> ListLists(int portalId);

        void DeleteNewsLetter(int newsLetterId);
        OptInNewsLetter EditNewsLetter(OptInNewsLetter newsLetterToEdit);
        OptInNewsLetter GetNewsLetter(int newsLetterId);
        OptInNewsLetter CreateNewsLetter(OptInNewsLetter newsLetterToCreate);
        IEnumerable<OptInNewsLetterWithCounts> ListNewsLetters(int portalId);
    }
}